package com.starview.star.compiler.wff;

import com.starview.platform.data.type.Location;
import com.starview.star.compiler.ast.IAbstract;
import com.starview.star.compiler.util.PrettyPrintable;



/**
 * A macro operator applies itself to an abstract syntax term.
 * 
 * @author fgm
 * 
 */
public interface WffOp extends PrettyPrintable
{
  enum applyMode
  {
    validates, notValidates, notApply
  };

  applyMode apply(IAbstract term, IAbstract env[], Location loc, WffEngine engine);

  long specificity();
}
